import java.util.Scanner;
import java.util.*;
/*车上最初有 capacity 个空座位。车 只能 向一个方向行驶（也就是说，不允许掉头或改变方向）
给定整数 capacity 和一个数组 trips ,
  trips[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客，
  接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。
当且仅当你可以在所有给定的行程中接送所有乘客时，返回 true，否则请返回 false。
输入：trips = [[2,1,5],[3,3,7]], capacity = 4
输出：false
 */
public class Test {
    public static boolean check(int[][] trips, int capacity) {
        int n = trips.length;
        int a=0;//记录最远下车点构建数组
        for(int[] t:trips){
            a=Math.max(a,t[2]);
        }
        int[] b=new int[a+1];
        int res=0;
        for(int[] x:trips ){
            b[x[1]]+=x[0];//上车加人
            b[x[2]]-=x[0];//下车减人
        }
        for(int z:b){
            res+=z;
            if(res>capacity)return false;
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] trips = new int[n][3];
        for (int i = 0; i < n; i++) {
            trips[i][0] = sc.nextInt();
            trips[i][1] = sc.nextInt();
            trips[i][2] = sc.nextInt();
        }
        int capacity = sc.nextInt();
        boolean result = check(trips, capacity);
        System.out.println(result);
    }
}